package cn.com.baiwei.service.impl;

import cn.com.baiwei.mapper.VipMapper;
import cn.com.baiwei.pojo.Vip;
import cn.com.baiwei.util.ZZUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * (Vip)表服务实现类
 *
 * @author X_Q
 * @since 2021-09-14 19:09:07
 * @version 1.0
 */
@Service("vipService")
public class VipServiceImpl {
    @Resource
    private VipMapper vipMapper;

    // 手机号正则表达式
    public static final String REGEX_MOBILE = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$";

    /**
     * 根据模糊条件查询总 个数
     *
     * @param vipPhone 查询条件
     * @return 返回查询到的总个数
     */
    public Map<String, Object> selectForCount(String vipPhone) {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.vipMapper.selectForCount(vipPhone));
        return map;
    }

    /**
     * 查询所有数据
     * @return  返回所有数据
     */
    public Map<String, Object> selectAll(String vipPhone) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.vipMapper.selectAll(vipPhone));
        return map;
    }

    public Map<String, Object> selectByPhone( String vipPhone) {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.vipMapper.selectByPhone(vipPhone));
        return map;
    }



    /**
     * 新增数据
     *
     * @param vip 实例对象
     * @return 实例对象
     */
    public Map<String, Object> insert(Vip vip) {
        Map<String, Object> map = new HashMap<>();
        String vipPhone = vip.getVipPhone();
        if((this.vipMapper.selectByPhone(vipPhone) != null)){
            map.put("code", 500);
            map.put("msg", "此手机号已是会员");
        }else{
            if (!ZZUtil.isPhone(vipPhone)){
                map.put("code", 500);
                map.put("msg", vipPhone +"-错误的手机号");
            }else{
                vip.setVipIntegral(0);
                Date date = new Date();
                vip.setVipTime(date);  //时间
                this.vipMapper.insert(vip);
                map.put("code", 200);
                map.put("msg", "会员新增成功");
                map.put("data", date);
            }
        }
        return map;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param vip 实例对象
     * @return 实例对象
     */
    public Map<String, Object> updateByPhone(Vip vip) {
        this.vipMapper.updateByPhone(vip);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "会员更新成功");
        return map;
    }

    /**
     * 通过主键删除数据
     *
     * @param vipPhone 主键
     * @return 是否成功
     */
    public Map<String, Object> deleteByPhone(String vipPhone) {
        this.vipMapper.deleteByPhone(vipPhone);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "会员删除成功");
        return map;
    }
}